package org.zjx.state;

import java.util.HashMap;
import java.util.Map;

/**
 * 状态数据管理类
 * 统一管理游戏中的所有状态数据
 */
public class StateManager {
    // 使用线程安全的 Map存储所有状态
    private final Map<Class<? extends IDataState>, IDataState> stateMap = new HashMap<>();

    // 私有构造方法
    public StateManager() {
        registerState(new GameState());
    }

    /**
     * 注册状态
     * @param state 状态实例
     * @param <T> 状态类型
     */
    public <T extends IDataState> void registerState(T state) {
        stateMap.put(state.getClass(), state);
    }

    /**
     * 获取状态
     * @param stateClass 状态类
     * @param <T> 状态类型
     * @return 状态实例
     */
    @SuppressWarnings("unchecked")
    public <T extends IDataState> T getState(Class<T> stateClass) {
        return (T) stateMap.get(stateClass);
    }

    /**
     * 更新状态
     * @param stateClass 状态类
     * @param newState 新状态
     * @param <T> 状态类型
     */
    public <T extends IDataState> void updateState(Class<T> stateClass, T newState) {
        stateMap.put(stateClass, newState);
    }

    /**
     * 重置特定状态
     * @param stateClass 要重置的状态类
     * @param <T> 状态类型
     */
    public <T extends IDataState> void resetState(Class<T> stateClass) {
        try {
            T newInstance = stateClass.getDeclaredConstructor().newInstance();
            stateMap.put(stateClass, newInstance);
        } catch (Exception e) {
            throw new RuntimeException("Failed to reset state: " + stateClass.getName(), e);
        }
    }


    /**
     * 获取游戏状态
     * @return 游戏状态
     */
    public GameState getGameState() {
        return getState(GameState.class);
    }

    /**
     * 保存所有状态到持久化存储
     */
    public void saveAllStates() {
        // 实现状态保存逻辑
        // 可以保存到数据库、文件等
    }

    /**
     * 从持久化存储加载所有状态
     */
    public void loadAllStates() {
        // 实现状态加载逻辑
        // 可以从数据库、文件等加载
    }
}